﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;

namespace sistemaAcademicoFinanceiroEscolas.DynamicData.CustomPages.notas
{
    public partial class ListProfessores : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            if (!Page.IsPostBack)
            {

                SqlConnection sqlc = new SqlConnection(ConfigurationManager.AppSettings["baseDados"]);
                sqlc.Open();

                //carregar anos letivos

                string sqlAnoLetivo = "select * from anoLetivo";

                SqlCommand cmdAnoLetivo = new SqlCommand(sqlAnoLetivo, sqlc);
                SqlDataReader myReaderAnoLetivo = cmdAnoLetivo.ExecuteReader();

                ListItem anoLetivoSelecione = new ListItem();
                anoLetivoSelecione.Value = "0";
                anoLetivoSelecione.Text = "Selecione um Ano Letivo";

                lstAnoLetivo.Items.Add(anoLetivoSelecione);

                while (myReaderAnoLetivo.Read())
                {

                    ListItem anoLetivo = new ListItem();

                    anoLetivo.Value = myReaderAnoLetivo["codigoAnoLetivo"].ToString();
                    anoLetivo.Text = myReaderAnoLetivo["descricaoAnoLetivo"].ToString();

                    lstAnoLetivo.Items.Add(anoLetivo);

                }

                //anios letivos carregados

                sqlc.Close();
                myReaderAnoLetivo.Close();
                cmdAnoLetivo.Dispose();

            }
        }

        protected void OnFilterSelectedIndexChanged(object sender, EventArgs e)
        {
            //GridView1.PageIndex = 0;
        }

        protected void lstAnoLetivo_SelectedIndexChanged(object sender, EventArgs e)
        {


            try
            {

                lstSerie.Items.Clear();

                SqlConnection sqlc = new SqlConnection(ConfigurationManager.AppSettings["baseDados"]);
                sqlc.Open();

                //Carregar séries

                string sqlSerie = "select * from serie where codigoAnoLetivo = " + lstAnoLetivo.SelectedValue;

                SqlCommand cmdSerie = new SqlCommand(sqlSerie, sqlc);
                SqlDataReader myReaderSerie = cmdSerie.ExecuteReader();

                ListItem serieSelecione = new ListItem();
                serieSelecione.Value = "0";
                serieSelecione.Text = "Selecione uma série";

                lstSerie.Items.Add(serieSelecione);

                while (myReaderSerie.Read())
                {

                    ListItem serie = new ListItem();

                    serie.Value = myReaderSerie["codigoSerie"].ToString();
                    serie.Text = myReaderSerie["descricaoSerie"].ToString();

                    lstSerie.Items.Add(serie);

                }

                cmdSerie.Dispose();
                myReaderSerie.Close();

                //Finalizar carregamento de séries

                //Carregar unidades

                lstUnidade.Items.Clear();

                string sqlUnidade = "select * from unidade where codigoAnoLetivo = " + lstAnoLetivo.SelectedValue;

                SqlCommand cmdUnidade = new SqlCommand(sqlUnidade, sqlc);
                SqlDataReader myReaderUnidade = cmdUnidade.ExecuteReader();

                ListItem unidadeSelecione = new ListItem();
                unidadeSelecione.Value = "0";
                unidadeSelecione.Text = "Selecione uma unidade";

                lstUnidade.Items.Add(unidadeSelecione);

                while (myReaderUnidade.Read())
                {

                    ListItem unidade = new ListItem();

                    unidade.Value = myReaderUnidade["codigoUnidade"].ToString();
                    unidade.Text = myReaderUnidade["descricaoUnidade"].ToString();

                    lstUnidade.Items.Add(unidade);

                }

                cmdUnidade.Dispose();
                myReaderUnidade.Close();

                //Finalizar carregamento de unidades

                sqlc.Close();


            }

            catch (InvalidCastException error)
            {

                Response.Write(error.Message);
            }
        }

        protected void lstSerie_SelectedIndexChanged(object sender, EventArgs e)
        {
            SqlConnection sqlc = new SqlConnection(ConfigurationManager.AppSettings["baseDados"]);
            sqlc.Open();

            //Carregar turmas

            lstTurma.Items.Clear();

            string sqlTurma = "select * from turma where codigoSerie = " + lstSerie.SelectedValue;

            SqlCommand cmdTurma = new SqlCommand(sqlTurma, sqlc);
            SqlDataReader myReaderTurma = cmdTurma.ExecuteReader();

            ListItem turmaSelecione = new ListItem();
            turmaSelecione.Value = "0";
            turmaSelecione.Text = "Selecione uma turma";

            lstTurma.Items.Add(turmaSelecione);

            while (myReaderTurma.Read())
            {

                ListItem turma = new ListItem();

                turma.Value = myReaderTurma["codigoTurma"].ToString();
                turma.Text = myReaderTurma["descricaoTurma"].ToString();

                lstTurma.Items.Add(turma);

            }

            cmdTurma.Dispose();
            myReaderTurma.Close();

            //Finalizar carregamento de turmas

            //Carregar disciplinas

            lstDisciplina.Items.Clear();

            string sqlDisciplina = "SELECT disciplinaProfessor.codigoProfessor, disciplina.codigoSerie, ";
            sqlDisciplina = sqlDisciplina + "disciplina.descricaoDisciplina as descricaoDisciplina, disciplina.codigoDisciplina as codigoDisciplina ";
            sqlDisciplina = sqlDisciplina + "FROM disciplina INNER JOIN disciplinaProfessor ON disciplina.codigoDisciplina = ";
            sqlDisciplina = sqlDisciplina + "disciplinaProfessor.codigoDisciplina WHERE (disciplinaProfessor.codigoProfessor = "+ Session["codigoUsuario"].ToString() +") ";
            sqlDisciplina = sqlDisciplina + "AND (disciplina.codigoSerie = "+ lstSerie.SelectedValue +")"; 
                
            SqlCommand cmdDisciplina = new SqlCommand(sqlDisciplina, sqlc);
            SqlDataReader myReaderDisciplina = cmdDisciplina.ExecuteReader();

            ListItem disciplinaSelecione = new ListItem();
            disciplinaSelecione.Value = "0";
            disciplinaSelecione.Text = "Selecione uma disciplina";

            lstDisciplina.Items.Add(disciplinaSelecione);

            while (myReaderDisciplina.Read())
            {

                ListItem disciplina = new ListItem();

                disciplina.Value = myReaderDisciplina["codigoDisciplina"].ToString();
                disciplina.Text = myReaderDisciplina["descricaoDisciplina"].ToString();

                lstDisciplina.Items.Add(disciplina);

            }

            cmdDisciplina.Dispose();
            myReaderDisciplina.Close();

            //Finalizar carregamento de disciplinas

            sqlc.Close();

        }

        protected void btnCadastrar_Click(object sender, EventArgs e)
        {
            lblValidacao.Text = "";
            listarAlunos();
            btnDefinir.Visible = true;
        }

        public void listarAlunos()
        {

            try
            {


                //Listar Alunos e caixas de texto para serem informadas as notas nos parametros antes definidos

                string comeco = "<table width=100% border=1 cellpadding=5 cellspacing=0 bordercolor=#99CCFF>";
                comeco = comeco + "  <tr>";
                comeco = comeco + "  <td width=48% class=textoNegro><strong>Aluno</strong></td>";
                comeco = comeco + "    <td width=52% class=textoNegro><strong>Nota</strong></td>";
                comeco = comeco + "  </tr>";

                Panel1.Controls.Add(new LiteralControl(comeco));

                SqlConnection sqlc = new SqlConnection(ConfigurationManager.AppSettings["baseDados"]);
                sqlc.Open();

                SqlConnection sqld = new SqlConnection(ConfigurationManager.AppSettings["baseDados"]);
                sqld.Open();

                string sql = "SELECT        aluno.codigoAluno, aluno.nomeAluno, matricula.codigoMatricula, ";
                sql = sql + "matricula.codigoTurma AS Expr3, matricula.codigoAnoLetivo ";
                sql = sql + " FROM            aluno INNER JOIN  ";
                sql = sql + " matricula ON aluno.codigoAluno = matricula.codigoAluno ";
                sql = sql + " WHERE (matricula.codigoTurma = " + lstTurma.SelectedValue + ") AND (matricula.codigoAnoLetivo = " + lstAnoLetivo.SelectedValue + ") AND (matricula.codigoSerie = " + lstSerie.SelectedValue + ")";


                SqlCommand cmdAlunosNotas = new SqlCommand(sql, sqlc);
                SqlDataReader myReaderAlunosNotas = cmdAlunosNotas.ExecuteReader();

                if (myReaderAlunosNotas.HasRows)
                {
                    int cont = 1;
                    while (myReaderAlunosNotas.Read())
                    {

                        TextBox txtbox = new TextBox();
                        txtbox.ID = myReaderAlunosNotas["codigoAluno"].ToString();


                        string meio = "    <tr>";
                        meio = meio + "    <td>" + myReaderAlunosNotas["nomeAluno"].ToString() + "</td>";
                        meio = meio + "    <td>";

                        //resgatar a nota do aluno, uma vez que já esteja cadastrada

                        string sqlResgNotaAluno = "select codigoNota, notaNota from nota where codigoAluno = " + myReaderAlunosNotas["codigoAluno"].ToString();
                        sqlResgNotaAluno = sqlResgNotaAluno + " and codigoDisciplina = " + lstDisciplina.SelectedValue;
                        sqlResgNotaAluno = sqlResgNotaAluno + " and codigoUnidade = " + lstUnidade.SelectedValue;

                        SqlCommand cmdNota = new SqlCommand(sqlResgNotaAluno, sqld);
                        SqlDataReader myReaderNota = cmdNota.ExecuteReader();

                        string nota = "";

                        if (myReaderNota.HasRows)
                        {
                            while (myReaderNota.Read())
                            {

                                nota = myReaderNota["notaNota"].ToString();

                            }

                        }

                        //nota resgatada
                        string litTxtBox = "<input type=text name=" + myReaderAlunosNotas["codigoAluno"].ToString() + " value=" + nota + ">";


                        Panel1.Controls.Add(new LiteralControl(meio));
                        Panel1.Controls.Add(new LiteralControl(litTxtBox));

                        string meio2 = "</td>";
                        meio2 = meio2 + "</tr>";

                        Panel1.Controls.Add(new LiteralControl(meio2));

                        if (cont == 1)
                        {
                            //txtbox.Focus();
                        }

                        cont++;

                        cmdNota.Dispose();
                        myReaderNota.Close();
                    }


                }

                cmdAlunosNotas.Dispose();
                myReaderAlunosNotas.Close();


                string fim = "</table>";

                Panel1.Controls.Add(new LiteralControl(fim));

                sqlc.Close();
                sqld.Close();



            }
            catch (InvalidCastException error)
            {

                Response.Write(error.Message);

            }



        }

        protected void btnDefinir_Click(object sender, EventArgs e)
        {

            try
            {

                //Listar Alunos e caixas de texto para serem informadas as notas nos parametros antes definidos

                SqlConnection sqlc = new SqlConnection(ConfigurationManager.AppSettings["baseDados"]);
                sqlc.Open();

                SqlConnection sqld = new SqlConnection(ConfigurationManager.AppSettings["baseDados"]);
                sqld.Open();

                string sql = "SELECT        aluno.codigoAluno, aluno.nomeAluno, matricula.codigoMatricula, ";
                sql = sql + "matricula.codigoTurma AS Expr3, matricula.codigoAnoLetivo ";
                sql = sql + " FROM            aluno INNER JOIN  ";
                sql = sql + " matricula ON aluno.codigoAluno = matricula.codigoAluno ";
                sql = sql + " WHERE (matricula.codigoTurma = " + lstTurma.SelectedValue + ") AND (matricula.codigoAnoLetivo = " + lstAnoLetivo.SelectedValue + ")";


                SqlCommand cmdAlunosNotas = new SqlCommand(sql, sqlc);
                SqlDataReader myReaderAlunosNotas = cmdAlunosNotas.ExecuteReader();

                if (myReaderAlunosNotas.HasRows)
                {
                    while (myReaderAlunosNotas.Read())
                    {

                        //verificar se vai cadastrar um registro novo ou se vai realizar uma modificacao

                        string sqlVer = "select * from nota where codigoAluno=" + myReaderAlunosNotas["codigoAluno"];
                        sqlVer = sqlVer + " and codigoUnidade = " + lstUnidade.SelectedValue;
                        sqlVer = sqlVer + " and codigoDisciplina = " + lstDisciplina.SelectedValue;

                        SqlCommand cmdVerSeEstaCadastrada = new SqlCommand(sqlVer, sqld);
                        SqlDataReader myReaderVerSeEstaCadastrada = cmdVerSeEstaCadastrada.ExecuteReader();

                        string sqlInserirnota = "";

                        if (myReaderVerSeEstaCadastrada.HasRows)
                        {
                            sqlInserirnota = "update nota set notaNota = '" + Request.Form[myReaderAlunosNotas["codigoAluno"].ToString()] + "' ";
                            sqlInserirnota = sqlInserirnota + "where codigoAluno = " + myReaderAlunosNotas["codigoAluno"];
                            sqlInserirnota = sqlInserirnota + " and codigoUnidade = " + lstUnidade.SelectedValue;
                            sqlInserirnota = sqlInserirnota + " and codigoDisciplina = " + lstDisciplina.SelectedValue;

                        }
                        else
                        {

                            sqlInserirnota = "insert into nota(codigoDisciplina, codigoAluno, codigoUnidade, notaNota) ";
                            sqlInserirnota = sqlInserirnota + " values(" + lstDisciplina.SelectedValue + ", ";
                            sqlInserirnota = sqlInserirnota + myReaderAlunosNotas["codigoAluno"] + ", " + lstUnidade.SelectedValue;
                            sqlInserirnota = sqlInserirnota + ", '" + Request.Form[myReaderAlunosNotas["codigoAluno"].ToString()] + "')";

                        }

                        SqlConnection sqle = new SqlConnection(ConfigurationManager.AppSettings["baseDados"]);
                        sqle.Open();

                        SqlCommand inserirNota = new SqlCommand(sqlInserirnota, sqle);
                        inserirNota.ExecuteNonQuery();

                        myReaderVerSeEstaCadastrada.Close();

                        cmdVerSeEstaCadastrada.Dispose();

                        sqle.Close();

                    }

                }

                lblValidacao.Text = "Notas definidas.<br>";

                sqlc.Close();
                sqld.Close();

                myReaderAlunosNotas.Close();

                listarAlunos();


            }

            catch (InvalidCastException error)
            {
                Response.Write(error.Message);
            }


        }

        protected void lstDisciplina_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (lstDisciplina.SelectedItem.Text != "Selecione uma disciplina") {

                btnListar.Visible = true;

            }
            else
            {

                btnListar.Visible = false;
            }
        }

    }
}
